package condominios.servlets;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import condominios.modelo.Dirigente;
import condominios.modelo.Junta;
import condominios.modelo.MensajeInterno;
import condominios.modelo.Persona;
import condominios.modelo.TemaAcuerdo;
import condominios.negocio.GestionJuntas;
import condominios.negocio.GestionMensajesInternos;
import condominios.negocio.GestionPersonas;
import condominios.util.utilitario;
import condominios.excepcion.DAOExcepcion;

/**
 * Servlet implementation class RegistrarJuntasServlet
 */
@WebServlet("/RegistrarJuntasServlet")
public class RegistrarJuntasServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    
	//ArrayList<Junta> juntas = new ArrayList<Junta>();
	//ArrayList<Persona> residentes = new ArrayList<Persona>(); 
	//int idJunta = 0;
	
    /**
     * @see HttpServlet#HttpServlet()
     */
    public RegistrarJuntasServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		
		GestionPersonas negocioResid = new GestionPersonas();
		try {
			Collection<Persona> lista = negocioResid.buscarTodos();
			// Guardar en el ambiente de request
			request.setAttribute("RESIDENTES_DIR", lista);
			//RequestDispatcher rd = request.getRequestDispatcher("juntas.jsp");
			//rd.forward(request, response);

		} catch (DAOExcepcion e) {
			System.out.println(e.getMessage());
			RequestDispatcher rd = request.getRequestDispatcher("error.jsp");
			rd.forward(request, response);
		}
		
		GestionJuntas negocioJuntas = new GestionJuntas();
		try {
			Collection<Junta> listaJuntas = negocioJuntas.listar();
			// Guardar en el ambiente de request
			request.setAttribute("JUNTAS_REGISTRADAS", listaJuntas);
			RequestDispatcher rd = request.getRequestDispatcher("juntas.jsp");
			rd.forward(request, response);

		} catch (DAOExcepcion e) {
			System.out.println(e.getMessage());
			RequestDispatcher rd = request.getRequestDispatcher("error.jsp");
			rd.forward(request, response);
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		
		HttpSession sesion = request.getSession();
		Persona vo = (Persona)sesion.getAttribute("user");
		
		if ( vo == null ){
			RequestDispatcher rd = request.getRequestDispatcher("error.jsp");
			rd.forward(request, response);
			return;
		}
		
		String descripJunta = request.getParameter("txtdescripcion");
		String fechaJunta = request.getParameter("txtfecha");
		String horaJunta = request.getParameter("txthora");
		String idDirigenteJunta = request.getParameter("txtdirigente");
		String temaJunta = request.getParameter("txttema");
		String acuerdoJunta = request.getParameter("txtacuerdos");
		String juntaOK = "NO";
		
		//idJunta++;
		
		Date fechaHoraJunta = utilitario.fnFechaHora(fechaJunta + " " + horaJunta);
		
		int idDirJunta = Integer.parseInt(idDirigenteJunta);
		
		ArrayList<Dirigente> dirigentes = new ArrayList<Dirigente>();

		String[] nun= request.getParameterValues("txtid");
		for (int i = 0; i < nun.length; i++) {
			if(nun[i]!= null && !nun[i].isEmpty());
	
			Dirigente d1 = new Dirigente();
			d1.setIdPersona(Integer.parseInt(nun[i]));
			dirigentes.add(d1);
		}
		
		ArrayList<TemaAcuerdo> temaacuerdos = new ArrayList<TemaAcuerdo>();
		
		String[] tem= request.getParameterValues("txttem");
		String[] acu= request.getParameterValues("txtacu");
		for (int i = 0; i < tem.length; i++) {
			if(tem[i]!= null && !tem[i].isEmpty());
			
			TemaAcuerdo ta1 = new TemaAcuerdo();
			ta1.setDescripcionTema(tem[i]);
			ta1.setDescripcionAcuerdo(acu[i]);
			temaacuerdos.add(ta1);
		}
		
		
		Junta nj = new Junta();
		nj.setDescripcion(descripJunta);
		nj.setFechaHora(fechaHoraJunta);
		nj.setDirigentes(dirigentes);
		nj.setTemaAcuerdos(temaacuerdos);
		//juntas.add(nj);
		
		//** Registrar un Mensaje con la info de la Junta **//
		SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
		SimpleDateFormat hf = new SimpleDateFormat("hh:mm aaa");
		
		MensajeInterno item= new MensajeInterno();				
		item.setTitulo("Junta - " + df.format(fechaHoraJunta));
		item.setContenido(descripJunta + ", el " + df.format(fechaHoraJunta) + ", a las " + hf.format(fechaHoraJunta));
		item.setFechaPublicacion(new Date());
		item.setEstado(true);
		item.setFechaCreo(new Date());
		item.setIdPersonaCreo(fnUsuarioLogeado(request).getIdPersona());
		item.setEstadoRegistro(true);
		
		GestionMensajesInternos negocioMsj=new GestionMensajesInternos();
		GestionJuntas negocio = new GestionJuntas();
		try {
			negocio.registrarJunta(descripJunta, fechaHoraJunta, 2, dirigentes, temaacuerdos);
			negocioMsj.insertar(item);
			juntaOK = "SI";
			//request.setAttribute("JUNTA_OK", juntaOK);
			sesion.setAttribute("juntaOK",juntaOK);
			
			response.sendRedirect(request.getContextPath()	+ "/RegistrarJuntasServlet");
		} catch (DAOExcepcion e) {
			juntaOK = "NO";
			//request.setAttribute("JUNTA_OK", juntaOK);
			sesion.setAttribute("juntaOK",juntaOK);
			
			RequestDispatcher rd = request.getRequestDispatcher("error.jsp");
			rd.forward(request, response);
		}
		
		
		
		/*// Guardando datos en el scope REQUEST
		request.setAttribute("JUNTAS_REGISTRADAS", juntas);
		request.setAttribute("JUNTA_OK", juntaOK);

		RequestDispatcher rd = request.getRequestDispatcher("juntas.jsp");
		rd.forward(request, response);*/
	}
	
	private Persona fnUsuarioLogeado(HttpServletRequest request){
		HttpSession sesion= request.getSession();
		Persona vo= new Persona();
		if(sesion.getAttribute("user")!= null){
			vo= (Persona)sesion.getAttribute("user");
		}
		return vo;
	}

}
